#include <gtkmm/button.h>
#include "VentanaEntradaDatos.h"
#include "Excepcion.h"

using namespace TP;

VentanaEntradaDatos::VentanaEntradaDatos() {
	_grilla = NULL;
	_botonSiguiente.set_label("Siguiente");
	_botonSiguiente.signal_clicked().connect(
			sigc::mem_fun(*this, &VentanaEntradaDatos::on_button_clicked));
	set_border_width(10);
}

void VentanaEntradaDatos::AddCampo(std::string& label) {
	Gtk::Entry* nuevoEntry = new Gtk::Entry;
	_vectorCampos.push_back(nuevoEntry);
	Gtk::Label* nuevoLabel = new Gtk::Label(label);
	_vectorLabels.push_back(nuevoLabel);
}

std::string VentanaEntradaDatos::GetValorCampo(unsigned int numCampo) {
	if (numCampo >= _vectorCampos.size()) {
		throw Excepcion("VentanaEntradaDatos: Número de campo inválido.");
	}
	Gtk::Entry* entry = _vectorCampos[numCampo];
	return entry->get_text();
}

void VentanaEntradaDatos::Show() {
	if (_grilla) delete _grilla;
	_grilla = new Gtk::Grid;
	_grilla->set_column_spacing(10);
	_grilla->set_row_spacing(10);
	_grilla->set_halign(Gtk::ALIGN_CENTER);
	for (unsigned int i = 0; i < _vectorCampos.size(); ++i) {
		Gtk::Entry* entry = _vectorCampos[i];
		Gtk::Label* label = _vectorLabels[i];
		_grilla->attach(*label, 0, i, 1, 1);
		_grilla->attach_next_to(*entry, *label, Gtk::POS_RIGHT, 3, 1);
	}
	_grilla->attach(_botonSiguiente, 1, _vectorCampos.size(), 1, 1);
	add(*_grilla);
	show_all_children(true);
	show_all();
}

VentanaEntradaDatos::~VentanaEntradaDatos() {
	std::vector<Gtk::Entry*>::iterator iteradorCampos;
	for (iteradorCampos = _vectorCampos.begin();
			iteradorCampos != _vectorCampos.end();
			++iteradorCampos) {
		delete (*iteradorCampos);
	}
	std::vector<Gtk::Label*>::iterator iteradorLabels;
	for (iteradorLabels = _vectorLabels.begin();
			iteradorLabels != _vectorLabels.end();
			++iteradorLabels) {
		delete (*iteradorLabels);
	}
	if (_grilla) delete _grilla;
}